Date		:	9 mars 1990 
		Programme	:	RAPIDFILE V1.1	( Version Francaise )
		Outils		:	TURBO DEBUGER V1.5 et PCTOOLS
		Protection	:	MESSAGE DE PRESENTATION
		Soci�t�		:	ASHTON TATE + COMMANDE ELECTRONIQUE
		Fichier		:	RF.COM
		Temps pass�	:
		Divers		:
		Origine		:	?
		Num�ro		:	007


	But: Enlever le message d'introduction de LA COMMANDE ELECTRONIQUE.

	Premi�res constatations:

	- Impossible de trouver un seul mot du message dans le fichier �
	  l'aide de PCTOOLS.
	- Le programme ne se d�ssassemble pas avec SOURCER V2.
	- PERISCOPE se plante m�me avec RUN.COM.
	- On arrive avec QUAID � trouver entre quelle et quelle
	  interruption le message complet s'affiche.
	- Il est impossible en mode pas � pas de s'arr�ter sur l'affichage
	  du message aussi bien avec QUAID qu'avec TURBO DEBUGGER: d�s la 
	  premi�re ligne d'affichage le programme s'ex�cute enti�rement.
	- En faisant du pas a pas avec TD on s'apercoit que le code n'est
	  jamais le m�me lorsqu'on passe une deuxi�me fois au m�me endroit!
	  En fait souvent le programme saute au milieu d'une instruction ce
	  qui modifie compl�tement le code qui suit!
	- Aucune interruption n'est utilis�e pour sortir les caract�res
	  ( ni l'INT 21 ni l'INT 10 - cel� aurait �t� trop facile ). Tout
	  laisse � supposer que l'on adresse directement la m�moire �cran.
	
	Ca promet.
	En essayant succ�ssivement plusieurs "manip" je m'apercois qu'en
	lancant le programme par F9 ( TD ) j'arrive � l'interrompre en
	faisant CONTROL BREAK. Et je me retrouve dans la boucle
	d'affichage!
	En me servant de F8 ( execution de sous-programme et d'INT ) ainsi
	que de F4 ( executer le programme jusqu'au curseur ) je m'apercois
	que tout se passe dans le CALL 363E ( CS:368F ): affichage d'une
	ligne � chaque fois.
	En 'd�cortiquant' le CALL 363E je tombe sur 3 autres CALL avant le
	RET.

	.
	.
	POP AX
	CALL 35A2
	PUSH AX
	.
	CALL 368F ����>.
	. <��������ͻ  .
	.	    �  .
	.	    �  CALL 1DF3 ; Lecture IN AL,03DA Ecriture OUT 03D8,AL
        .	    �  .         ; adresses registres de la carte graphique
	.	    �  CALL 2106 ; Les lignes sont affich�es ici une par
		    �		 ; une.    
		    �  CALL 1E20 ; Ecriture adresse carte graphique OUT
		    �		 ; 03D8,AL
		    �  .
		    �  .
		    �� RET
	
	Le premier et le troisi�me CALL ne servent qu'� tester la carte
	vid�o pour n'envoyer les caract�res qu'en dehors d'un balayage
	ligne. ( Compatibilit� avec les premi�res cartes CGA et
	MONOCHROMES cel� �vite un d�chirement de l'image - Les cartes
	EGA/VGA n'ont pas ce d�faut. )

	La premi�re id�e est de supprimer le CALL central...et cel�
	fonctionne parfaitement pour supprimer le message d'entr�. Mais
	chose curieuse on se retrouve avec un RAPIDFIL qui affiche des
	fen�tres vid�es de tout texte! Bravo l'id�e d'afficher tout ce qui
	ressemblait � un caract�re ASCII dans le soft � l'aide du m�me CALL
	est assez g�nial.
	Le CALL 2106 comporte une boucle qui tourne 80 fois ( 1 ligne de 80
	caract�res ) 50h dans CX avec un LODSB ( load byte de DS:SI -> AL )
	suivi d'un STOSW ( store word vers ES:DI ) et DI contient B800 cad
	l'adresse de la m�moire �cran.
	
		MOV CX,50
		LODSB
		STOSW
		LOOP
 
	Donc ne pouvant pas modifier la sortie sans alt�rer la suite du 
	programme, j'essaie de trouver d'ou vienne les caract�res. Je DUMP
	le contenu de DS:SI SI=341C et je "vois" effectivement la ligne
	apparaitre avant d'etre affich�e sur 80 caract�res � partir de
	DS:SI. A l'aide de l'instruction ALT-P je remonte le programme en
	sens inverse afin de localiser l'endroit d'ou la ligne est tir�e.
	Apr�s plusieurs essais je tombe sur un CALL 35A2 situ� avant mon
	CALL principal 36F8.
	En approffondissant le CALL 35A2 on voit qu'en fait le message et
	tout les textes du soft sont �parpill�s lettre par lettre dans le
	fichier.
	Le tout est reconstitu� ligne par ligne par 2 boucles imbriqu�es 
	relativement complexes. J'ai sorti la routine pour la faire se
	d�rouler au pas � pas par VISIBLE COMPUTER 80286 et ainsi
	visualiser les registres et les diff�rentes zones m�moire.
	Les caract�res sont appel�s par groupe de 3,2,4,6,5 de n'importe
	quel endroit du fichier pour �tre mis bout � bout � partir de 341C.
	On remarque une chose int�rressante; avant l'appel du CALL 35A2 on
	charge AX ( POP ) et � la sortie du programme on le sauve sur la
	pile ( PUSH ). AX commence � la valeur 19h pour �tre incr�ment�
	ligne par ligne jusqu'� 2Eh. On retrouve donc les 25 lignes de
	l'�cran.
	Ne pouvant pas modifier les caract�res sous peine de modifier 
	l'affichage de la suite du programme, l'id�e vient d'emp�cher la
	sortie ligne par ligne pendant les 25 premi�res lignes du programme
	Bonne id�e, mais le programme ne se d�ssassemblant pas il est
	impossible d'y rajouter du code � moins de jongler avec les HEADER,
	PSP, etc...
	Il ne reste donc plus qu'� trouver une zone non utilis�e. ( zone
	DATA ) Avec PCTOOLS on s'apercoit que le message d'origine - non
	crypt� - est toujours pr�sent dans le fichier.( Message en Anglais
	d'ASHTON TATE )
	Un essai est vite fait en remplissant de "20" toute une zone et 
	d'essayer � nouveau le soft pour s'assurer qu'il fonctionne
	toujours.
	C'est le cas! Je remplace donc le CALL 35A2 par un CALL 0300 qui
	saute dans ma zone de donn�es non utilis�es. J'y place un RETour et
	je v�rifie si tout continue de fonctionner comme avant. Voil� le
	plus dur est fait, maintenant ce n'est plus qu'une question de
	quelques instructions en assembleur.

	.
	.
	.	
3755	POP AX
3756	CALL 0300 �������> CMP AX,002E	    ;je compare AX � 2Eh
3759	PUSH AX	<������ͻ  JBE 30C	    ;si plus petit ou �gal saut...
	.		�  MOV w[3757],FE49 ;remplace le CALL 0300 par le
	.		�		    ;CALL d'origine en 35A2!....
	.	    30B	�� RET		    ;retour	
	.	    30C �  MOV DX,0400	    ;ici routine d'affichage
		    30F	�  MOV AH,09	    ;personnel. 	
		    311	�  INT 21           ;sortie d'une chaine de
		    313	�  MOV AH,06	    ;caract�res.
		    315 �  XOR AL,AL	
		    317 �  NOP
		    318 �  NOP
		    319 �� RET


	Chaine personnelle en CS:0601h     "Rapidfil version 1.1 modifi�"
			   et CS:DX 0400h  "        80 espaces          "

	L'instruction MOV WORD PTR [3757],FE49 remet dans l'emplacement
	m�moire 3757 et 3758 ( word ) la valeur HEXA 49FE qui correspond
	� un saut relatif en 35A2. C'est � dire remet en place le saut
	originel du programme pour �viter que par la suite le programme ne
	soit perturb�.
	Sans cette petite rectification le soft se plante lorsqu'on rajoute
	un fichier � un autre d�j� en m�moire dans RF.

	Note: Pour entrer des nombres HEXA avec TD il faut soit les faires 
	pr�c�der par 0 ou finir par h. Ceci seulement si le nombre contient
	des lettres HEXA ABCDEF.
	Voil� le travail......il ne reste plus qu'� r�p�ter la m�me chose
	pour les versions plus r�centes.		

	M�thode pratique:

	1)	Avec PCTOOLS chercher la chaine:

		2020202020202020BA01C8CDCDCDCDCDCD.....

		Et remplacer par ( en commencant par le premier 20 )

		3D2E00			; Adresse 0300 h, c'est en fait la
		7607			; traduction des instructions ASM
		C706573749FE		; tap�es plus haut.
		C3			; RET
		BA0004
		B409
		CD21			; INT 21
		B406
		32C0
		9090			; NOP 2 fois	
		C3			; RET		adresse 0319h
					; Donc 26 octets � remplacer.

	2)	Rep�rer  6446696C6520206F...   ( dfile  on one computer...)

		Placer ici � partir de 64 sa propre chaine ASCII qui sera 
		affich�e sur l'�cran � la place du message d'origine. A
		partir du premier octet (64) on dispose de 80 caract�res.
		Le premier caract�re inclu.

	3)	Rep�rer  6420415348544F4E....	( d ASHTON-TATE...)

		Placer ici 80 espaces suivi d'un $ (24h).

	4)	Pour terminer rep�rer E849FE50AD93FF27430A5337 et changer 
		les 2me et 3me octets par A7CB.  ( CALL 0300 )
		
		Freddy.